Uitwisselprofiel Zorgkantoren Inkoopondersteuning en beleidsontwikkeling
Over Uitwisselprofiel Zorgkantoren Inkoopondersteuning en beleidsontwikkeling
- Publicatiedatum:
- 11-07-2025
- Inwerkingtreding:
- 11-07-2025
18.1 Balans o.b.v. Grootboek (Prismant)
Concepten
Relaties
Eigenschappen
SPARQL query
Code gekopieerd
...Kopieer naar klembord
1# Indicator: Zorgkantoren 18.1.0 2# Parameters: ?peildatum 3# Ontologie: versie 3.0.0 of nieuwer 4 5PREFIX onz-fin: <http://purl.org/ozo/onz-fin#> 6prefix onz-zorg: <http://purl.org/ozo/onz-zorg#> 7PREFIX onz-g: <http://purl.org/ozo/onz-g#> 8PREFIX xsd: <http://www.w3.org/2001/XMLSchema#> 9 10SELECT 11 ?jaarrekeningpost 12 (SUM(?bedrag_rubriek) AS ?bedrag) 13WHERE 14{ 15 BIND(?peildatum AS ?peildatum_argument) 16 { 17 { 18 SELECT # totaal per rubriek 19 (SUM(?geld_bedrag) + SUM(?saldo_waarde)/count(?saldo_waarde) AS ?bedrag_rubriek) ?rubriek ?categorie 20 WHERE { 21 { 22 SELECT # bereken het meest recente saldo per rubriek, 0 indien geen saldo 23 ?rubriek ?categorie 24 (IF(BOUND(?saldo_bedrag), ?saldo_bedrag, 0) AS ?saldo_waarde) 25 ?peildatum_argument 26 (IF(BOUND(?saldo_datum), ?saldo_datum, ?unbound) AS ?begin_datum) 27 ?saldo_datum ?saldo 28 WHERE { 29 # BIND("2024-12-31"^^xsd:date AS ?peildatum) 30 BIND(?peildatum as ?peildatum_argument) 31 # Dynamically identify rubrieken and assign categories 32 # This assumes ?rubriek instances are findable as subjects/objects in the graph 33 # and their IRIs start with onz-fin: followed by a 6-digit code. 34 # For performance, we select ?rubriek instances based on their specific type. 35 { 36 SELECT DISTINCT ?rubriek WHERE { 37 ?rubriek a onz-fin:Grootboekrubriek . 38 39 # These filters can be kept as a safeguard, but the type-based selection 40 # is doing the primary work of finding the correct rubrieken. 41 FILTER(STRSTARTS(STR(?rubriek), STR(onz-fin:))) 42 FILTER(REGEX(STRAFTER(STR(?rubriek), STR(onz-fin:)), "^[0-9]{6}$")) 43 } 44 } 45 # Re-BIND rubriekCode here as it's outside the subquery's scope for BIND 46 BIND(STRAFTER(STR(?rubriek), STR(onz-fin:)) AS ?rubriekCode) 47 48 # Assign category based on the ?rubriekCode pattern 49 BIND( 50 COALESCE( 51 # Rubrieken A.I t/m A.III 52 IF(STRSTARTS(?rubriekCode, "00"), "A.I", ?unbound), 53 IF(STRSTARTS(?rubriekCode, "01"), "A.II", ?unbound), 54 IF(STRSTARTS(?rubriekCode, "03"), "A.III", ?unbound), 55 56 # Rubrieken B.I t/m B.IV 57 IF(STRSTARTS(?rubriekCode, "3"), "B.I", ?unbound), 58 IF(STRSTARTS(?rubriekCode, "12"), "B.II", ?unbound), 59 IF(STRSTARTS(?rubriekCode, "131"), "B.III", ?unbound), 60 IF(STRSTARTS(?rubriekCode, "132"), "B.IV", ?unbound), 61 62 # Rubrieken D.I t/m D.VIII (D.II en D.III bestaan niet in prismant, altijd 0) 63 IF(STRSTARTS(?rubriekCode, "0511"), "D.I", ?unbound), 64 IF(STRSTARTS(?rubriekCode, "05413"), "D.IV", ?unbound), 65 IF(STRSTARTS(?rubriekCode, "05311") || STRSTARTS(?rubriekCode, "05342") || STRSTARTS(?rubriekCode, "05423"), "D.V", ?unbound), 66 IF(STRSTARTS(?rubriekCode, "05323"), "D.VI", ?unbound), 67 IF(STRSTARTS(?rubriekCode, "0539") || STRSTARTS(?rubriekCode, "05493") || STRSTARTS(?rubriekCode, "05915"), "D.VII", ?unbound), 68 IF(STRSTARTS(?rubriekCode, "091"), "D.VIII", ?unbound), 69 70 # Rubriek E 71 IF(STRSTARTS(?rubriekCode, "06"), "E", ?unbound), 72 73 # Rubriek F 74 IF(STRSTARTS(?rubriekCode, "07"), "F", ?unbound), 75 76 # Rubriek G 77 IF(STRSTARTS(?rubriekCode, "14") || STRSTARTS(?rubriekCode, "15"), "G", ?unbound), 78 "other" 79 ) AS ?categorie 80 ) 81 # Only process rubrieken that fall into one of the defined categories 82 FILTER(BOUND(?categorie)) 83 84 OPTIONAL { 85 ?rubriek onz-g:isAbout ?saldo . 86 ?saldo 87 a onz-fin:EindSaldo ; 88 onz-fin:heeftGeldBedrag ?saldo_bedrag ; 89 onz-g:hasDate ?saldo_datum . 90 FILTER (?saldo_datum <= ?peildatum_argument) 91 } 92 FILTER NOT EXISTS { 93 ?rubriek onz-g:isAbout ?saldo2 . 94 ?saldo2 95 onz-g:hasDate ?saldo_datum2 ; 96 a onz-fin:EindSaldo ;. 97 FILTER(?saldo2 != ?saldo) 98 FILTER (?saldo_datum2 <= ?peildatum_argument && ?saldo_datum2 > ?saldo_datum) 99 } 100 } # End of innermost WHERE 101 } # End of innermost SELECT block 102 OPTIONAL { # sommige rubrieken hebben misschien geen post 103 ?grootboek_post 104 a onz-fin:Grootboekpost ; 105 onz-g:partOf ?rubriek ; 106 onz-g:hasDate ?datum ; 107 onz-fin:heeftGeldBedrag ?geld_bedrag_temp . 108 FILTER (?datum <= ?peildatum_argument && (?datum > ?begin_datum || !BOUND(?begin_datum))) 109 } 110 BIND(IF(BOUND(?geld_bedrag_temp), ?geld_bedrag_temp, 0) AS ?geld_bedrag) 111 112 } GROUP BY ?rubriek ?categorie 113 } # End of middle SELECT block 114 115 VALUES (?categorie ?jaarrekeningpost_child){ 116 ("A.I" "A.I Immateriële vaste activa") 117 ("A.II" "A.II Materiële vaste activa") 118 ("A.III" "A.III Financiële vaste activa") 119 ("B.I" "B.I Voorraden") 120 ("B.II" "B.II Vorderingen") 121 ("B.III" "B.III Effecten") 122 ("B.IV" "B.IV Liquide middelen") 123 ("D.I" "D.I Gestort en opgevraagd kapitaal") 124 ("D.IV" "D.IV Wettelijke en statutaire reserve") 125 ("D.V" "D.V Bestemmingsreserve") 126 ("D.VI" "D.VI Bestemmingsfonds") 127 ("D.VII" "D.VII Overige reserves") 128 ("D.VIII" "D.VIII Onverdeelde winst") 129 ("E" "E Voorzieningen") 130 ("F" "F Langlopende schulden") 131 ("G" "G Kortlopende schulden") 132 } 133 134 # Determine the parent-level post (A, B, D...) based on the first letter 135 BIND( 136 IF(STRSTARTS(?categorie, "A."), "A Vaste activa", 137 IF(STRSTARTS(?categorie, "B."), "B Vlottende activa", 138 IF(STRSTARTS(?categorie, "D."), "D Eigen vermogen", 139 ?unbound))) AS ?jrp_parent # Fallback naar ?unbound om dubbeltelling te voorkomen 140 ) 141 142 BIND( 143 IF(STRSTARTS(?categorie, "A.") || STRSTARTS(?categorie, "B."), "C Totaal activa", 144 IF(STRSTARTS(?categorie, "D.") || ?categorie = "E" || ?categorie = "F" || ?categorie = "G", "H Totaal passiva", 145 ?unbound)) AS ?combi 146 ) 147 148 VALUES ?x {1 2 3} 149 BIND( 150 IF(?x = 1, ?jaarrekeningpost_child, 151 IF(?x = 2, ?jrp_parent, 152 IF(?x = 3, ?combi, 153 ?unbound))) AS ?jaarrekeningpost 154 ) 155 156 FILTER(BOUND(?jaarrekeningpost)) 157 158 } 159 UNION 160 { 161 # ======================================================================= 162 # Volledige lijst van alle jaarrekeningposten (bedrag 0 als fallback) 163 # ======================================================================= 164 BIND(0 AS ?bedrag_rubriek) 165 VALUES (?jaarrekeningpost_child ?jrp_parent ?combi) { 166 # A: Vaste activa 167 ("A.I Immateriële vaste activa" "A Vaste activa" "C Totaal activa") 168 ("A.II Materiële vaste activa" "A Vaste activa" "C Totaal activa") 169 ("A.III Financiële vaste activa" "A Vaste activa" "C Totaal activa") 170 171 # B: Vlottende activa 172 ("B.I Voorraden" "B Vlottende activa" "C Totaal activa") 173 ("B.II Vorderingen" "B Vlottende activa" "C Totaal activa") 174 ("B.III Effecten" "B Vlottende activa" "C Totaal activa") 175 ("B.IV Liquide middelen" "B Vlottende activa" "C Totaal activa") 176 177 # D: Eigen vermogen 178 ("D.I Gestort en opgevraagd kapitaal" "D Eigen vermogen" "H Totaal passiva") 179 ("D.II Agio" "D Eigen vermogen" "H Totaal passiva") 180 ("D.III Herwaarderingsreserve" "D Eigen vermogen" "H Totaal passiva") 181 ("D.IV Wettelijke en statutaire reserve" "D Eigen vermogen" "H Totaal passiva") 182 ("D.V Bestemmingsreserve" "D Eigen vermogen" "H Totaal passiva") 183 ("D.VI Bestemmingsfonds" "D Eigen vermogen" "H Totaal passiva") 184 ("D.VII Overige reserves" "D Eigen vermogen" "H Totaal passiva") 185 ("D.VIII Onverdeelde winst" "D Eigen vermogen" "H Totaal passiva") 186 187 # E, F, G: Overige passiva 188 ("E Voorzieningen" "E Voorzieningen" "H Totaal passiva") 189 ("F Langlopende schulden" "F Langlopende schulden" "H Totaal passiva") 190 ("G Kortlopende schulden" "G Kortlopende schulden" "H Totaal passiva") 191 } 192 193 VALUES ?post_type { 1 2 3 } # 1=child, 2=parent, 3=combi 194 BIND( 195 IF(?post_type = 1, ?jaarrekeningpost_child, 196 IF(?post_type = 2, ?jrp_parent, 197 IF(?post_type = 3, ?combi, ?unbound))) AS ?jaarrekeningpost 198 ) 199 FILTER(BOUND(?jaarrekeningpost)) 200 } 201} GROUP BY ?jaarrekeningpost 202ORDER BY ?jaarrekeningpost